#!/usr/bin/python3
# _*_ coding: utf-8 _*_
#
# Copyright (C) 2024 - 2024 heihieyouheihei, Inc. All Rights Reserved 
#
# @Time    : 2024/8/23 22:41
# @Author  : Yuyun
# @File    : leetcode_18_四数之和.py
# @IDE     : PyCharm
'''
给你一个由 n 个整数组成的数组 nums ，和一个目标值 target 。
请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] （若两个四元组元素一一对应，则认为两个四元组重复）：
0 <= a, b, c, d < n
a、b、c 和 d 互不相同
nums[a] + nums[b] + nums[c] + nums[d] == target
你可以按 任意顺序 返回答案 。

示例 1：
输入：nums = [1,0,-1,0,-2,2], target = 0
输出：[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]

示例 2：
输入：nums = [2,2,2,2,2], target = 8
输出：[[2,2,2,2]]

提示：
1 <= nums.length <= 200
-109 <= nums[i] <= 109
-109 <= target <= 109
'''

class Solution:
    def sum_of_four(self, nums, target):
        result = []     #   存储结果数组[a, b, c, d]
        length =len(nums)
        nums.sort()     #   升序排序
        for start in range(length):
            #   如果数组最小值 > 目标值，表示（正整数）数组无法找到三元组；剪枝
            if (nums[start] > target) and (target >= 0 or nums[start] >= 0):
                return result
            #   a值去重，取一次，后续相同值不取
            if start > 0 and nums[start] == nums[start - 1]:
                continue
            for mid in range(start + 1, length):
                tmp_total = nums[start] + nums[mid]
                #数组最小两个值 > 目标值，表示数组无法找到三元组；剪枝
                if (tmp_total > target) and (target >= 0 or tmp_total >= 0):
                    return result
                #b值去重
                if mid > start + 1 and nums[mid] == nums[mid - 1]:
                    continue
                tmp_mid = mid + 1
                end = length - 1
                while tmp_mid < end:
                    total = nums[start] + nums[mid] + nums[tmp_mid] + nums[end]
                    if total > target:
                        end -= 1
                    elif total < target:
                        tmp_mid += 1
                    else:       #找到三元组
                        result.append([nums[start], nums[mid], nums[tmp_mid], nums[end]])
                        tmp_mid += 1
                        end -= 1
        return result
if __name__ == '__main__':
    nums = list(map(int, input().split(',')))
    target = int(input())
    solution = Solution()
    print(solution.sum_of_four(nums, target))